#ifndef UC_BREDGE_H
#define UC_BREDGE_H 1

#include "zadesk.h"
#include "zrxobject.h"
#include "zrxboiler.h"
#include "zgegbl.h"
#include "ucbrgbl.h"
#include "ucbrent.h"


// forward class declarations
class UcGePoint3d;
class UcGeCurve3d;
class UcGeNurbCurve3d;
class UcBrVertex;


class DllImpExp UcBrEdge : public UcBrEntity
{
public:
    UCRX_DECLARE_MEMBERS(UcBrEdge);
    UcBrEdge();
    UcBrEdge(const UcBrEdge& src);
    ~UcBrEdge();

    // Assignment operator
    UcBrEdge&           operator =      (const UcBrEdge& src);

    // Geometry
    UcBr::ErrorStatus   getCurveType    (UcGe::EntityId& type) const;
    UcBr::ErrorStatus   getCurve        (UcGeCurve3d*& curve) const;
    UcBr::ErrorStatus   getOrientToCurve(ZSoft::Boolean& bOrientToCurve) const;

    // Downward links
    // Vertex usage by edge (2::1, 1::1 or 0::1)
    UcBr::ErrorStatus   getVertex1      (UcBrVertex& vertex) const;
    UcBr::ErrorStatus   getVertex2      (UcBrVertex& vertex) const;

	// Set-Membership Classification (Note: deprecated functions)
    UcBr::ErrorStatus   getPointRelationToEdge(const UcGePoint3d& point, UcBr::Relation& relation) const;
    UcBr::ErrorStatus   getCurveRelationToEdge(const UcGeCurve3d& curve, UcBr::Relation& relation) const;

    // Geometry
    UcBr::ErrorStatus   getCurveAsNurb	(UcGeNurbCurve3d& nurb,
		                                 const double&    fitTolRequired = *(double*)NULL,
										 double&          fitTolAchieved = *(double*)NULL) const;
};


#endif

